@inherits umbraco.MacroEngines.DynamicNodeContext

@* Render the sitemap by passing the root node to the traverse helper *@
<div class="sitemap">
    @traverse(@Model.AncestorOrSelf())
</div>

@* Helper method to travers through all descendants *@
@helper traverse(dynamic node)
{

    @* If a MaxLevelForSitemap parameter is passed to the macro, otherwise default to 4 levels *@
    var maxLevelForSitemap = String.IsNullOrEmpty(Parameter.MaxLevelForSitemap) ? 4 : int.Parse(Parameter.MaxLevelForSitemap);

    @* Select visible children *@
    var items = node.Children.Where("Visible").Where("Level <= " + maxLevelForSitemap);


    @* If any items are returned, render a list *@
    if (items.Any())
    {
        <ul>
            @foreach (var item in items)
            {
                <li class="level-@item.Level">
                    <a href="@item.Url">@item.Name</a>

                    @*Run the traverse helper again *@
                    @traverse(item)
                </li>
            }
        </ul>
    }
}